<?php
class Duenios extends MY_Controller {

	// Datos para pasar a las vistas
	var $pageTitle = 'Prevet :: Dueños';
	var $nombre_entidad = 'Duenio';		// Cadena utilizada para los títulos de las páginas

	// Vistas manejadas por el controlador
	var $CARPETA_VISTAS = 'afiliados/';
	var $pagina_ver_todos;
	var $pagina_editar;
	var $pagina_ver;
	var $pagina_cuotas;
	var $pagina_busqueda;

	public function __construct()
    {
    	parent::__construct();

    	$this->pagina_ver_todos = $this->CARPETA_VISTAS . 'duenio_ver_todos_view';
    	$this->pagina_editar = $this->CARPETA_VISTAS . 'duenio_edit_view';
    	$this->pagina_ver = $this->CARPETA_VISTAS . 'duenio_ver_view';
    	$this->pagina_cuotas = $this->CARPETA_VISTAS . 'duenio_cuota_view';
    	$this->pagina_busqueda = $this->CARPETA_VISTAS . 'duenio_buscar_view';
	}
	
	public function nuevo()
	{
		$dataView['title'] = 'Agregar Dueño';
		$dataView['id_elemento'] = NULL; 	// IMPORTANTE: debe ser nulo para uno nuevo

		$this->_cargarFormEdicion($dataView);
	}

	public function editar($id_elemento)
	{
		$dataView['title'] = 'Editar Dueño';
		$dataView['id_elemento'] = $id_elemento;

		$this->_cargarFormEdicion($dataView);
	}

	private function _cargarFormEdicion($dataView, $cargaCompleta = FALSE)
	{
		if(!isset($dataView['obj'.$this->nombre_entidad]))
		{
			$id_elemento = $dataView['id_elemento'];

			// Creo un objeto del modelo, para poblarlo con los datos que necesito mostrar
			$obj_duenio = new Duenio($id_elemento);
			$dataView['obj'.$this->nombre_entidad] = $obj_duenio;
		}

		// Creo un objeto del modelo, para poder buscar todos los datos en la BD
		$obj_tipo_documento = new Documento();
		$dataView['listado_documentos'] = $obj_tipo_documento->get_iterated();

		if($cargaCompleta) $dataView['modalDesactivado'] = TRUE;

		parent::_loadViews($this->pagina_editar, $dataView, $cargaCompleta);
	}

	public function guardar()
	{
		$dataView['title'] = 'Guardar Dueño';
		$dataView['error'] = '';

		// Se obtienen los datos del formulario para poblar el modelo
		$id_duenio = is_numeric($this->input->post('txt_id')) ? $this->input->post('txt_id') : NULL;
		$obj_duenio = new Duenio($id_duenio);
		$obj_duenio->nombre = $this->input->post('txt_nombre_duenio');
		$obj_duenio->apellido = $this->input->post('txt_apellido_duenio');
		$obj_duenio->sexo = $this->input->post('txt_sexo');
		$obj_duenio->dni = $this->input->post('txt_dni_duenio');
		$obj_duenio->email = $this->input->post('txt_email_duenio');
		$obj_duenio->telefono = $this->input->post('txt_telefono_duenio');
		$obj_duenio->domicilio = $this->input->post('txt_domicilio_duenio');
		$obj_duenio->observaciones = $this->input->post('txtarea_observaciones');

		if($id_duenio == 0 || $id_duenio == NULL) $obj_duenio->fecha_creacion = date('Y-m-d H:i:s');
		else $obj_duenio->fecha_modificacion = date('Y-m-d H:i:s');

		// Defino el objeto que se desea asociar
		$id_documento = is_numeric($this->input->post('txt_documento')) ? $this->input->post('txt_documento') : NULL;
		$obj_documento = new Documento($id_documento);

		// Se manejan transacciones para interactuar con la BD
		$obj_duenio->trans_begin();
		$operacion_exitosa = $obj_duenio->save($obj_documento);
		if(!$operacion_exitosa && !$obj_duenio->valid) // Falló la validación de datos
		{
			// Vuelvo a cargar el formulario de edición y mostrar los errores de validación
			$dataView['obj'.$this->nombre_entidad] = $obj_duenio;
			$dataView['error'] = $obj_duenio->error->string;
			$this->_cargarFormEdicion($dataView, TRUE);
		}
		else
		{
			if ($obj_duenio->trans_status() === FALSE) // Se chequea el estado de la transacción
			{
			    $obj_duenio->trans_rollback(); // Si la transacción falló, hago un rollback
			}
			else
			{
			    $obj_duenio->trans_commit(); // Transacción exitosa, realizo el commit
			}

			$dataView['error'] = $obj_duenio->error->string; // Almaceno todos los errores que hubieran podido ocurrir
			$this->ver_todos($dataView);
		}
	}

	public function ver_todos($dataView = array())
	{
		$dataView['title'] = 'Listado de Dueños';

		// Creo un objeto del modelo, para poblarlo con los datos que necesito mostrar
		$dataView['listado'] = $this->_aplicarFiltros();
		parent::_loadViews($this->pagina_ver_todos, $dataView);
	}

	private function _aplicarFiltros()
	{
		$existe_filtro = FALSE;

		// Listado de afiliados
		$obj_duenio = new Duenio();

		$nombre = trim($this->input->post('filtro_nombre_duenio'));
		if($nombre != '') { $obj_duenio->ilike('nombre', $nombre); $existe_filtro = TRUE; }

		$apellido = trim($this->input->post('filtro_apellido_duenio'));
		if($apellido != '') { $obj_duenio->ilike('apellido', $apellido); $existe_filtro = TRUE; }		

		$dni_duenio = is_numeric($this->input->post('filtro_dni_duenio')) ? $this->input->post('filtro_dni_duenio') : 0;
		if($dni_duenio != 0) { $obj_duenio->where('dni', $dni_duenio); $existe_filtro = TRUE; }

		// Si no se hubieran realizado filtros, se muestran los 10 primeros
		if(!$existe_filtro) {
			$obj_duenio->limit(10);
			$obj_duenio->order_by('id', 'desc');
		}

		return $obj_duenio->get_iterated();
	}

	public function buscar($pagina_solicitante)
	{
		$dataView['title'] = 'Búsqueda de Dueños';

		// Según el formulario que lo llama, defino dónde se debe mostrar el resultado de la búsqueda
		$partes = explode('-', $pagina_solicitante);
		$dataView['nombre_controlador'] = $partes[0];
		$dataView['metodo'] = $partes[1];

		// Creo un objeto del modelo, para poblarlo con los datos que necesito mostrar
		$dataView['listado'] = $this->_aplicarFiltros();

		$dataView['mascota_id'] = is_numeric($this->input->post('mascota')) ? $this->input->post('mascota') : NULL;
		
		parent::_loadViews($this->pagina_busqueda, $dataView, FALSE);
	}

	// Por el momento no se implementa la eliminación del dueño
	private function _eliminar($id_elemento)
	{
		$dataView['title'] = 'Eliminar ' . $this->nombre_entidad;
		$dataView['error'] = '';

		// Se obtiene el objeto que se desea eliminar
		$obj_duenio = new Duenio($id_elemento);
		
		// Se manejan transacciones para interactuar con la BD
		$obj_duenio->trans_begin();
		$obj_duenio->delete();
		if ($obj_duenio->trans_status() === FALSE) // Se chequea el estado de la transacción
		{
		    $obj_duenio->trans_rollback(); // Si la transacción falló, hago un rollback
		}
		else
		{
		    $obj_duenio->trans_commit(); // Transacción exitosa, realizo el commit
		}

		$dataView['error'] = $obj_duenio->error->string; // Almaceno todos los errores que hubieran podido ocurrir
		$this->ver_todos($dataView);
	}

	public function ver($id_elemento)
	{
		$dataView['title'] = 'Ver dueño';

		// Creo un objeto del modelo, para poblarlo con los datos que necesito mostrar
		$obj_duenio = new Duenio($id_elemento);
		$dataView['obj'.$this->nombre_entidad] = $obj_duenio;

		$dataView['listado_afiliados'] = $obj_duenio->afiliado->get_iterated();

		parent::_loadViews($this->pagina_ver, $dataView, FALSE);
	}
}